tcp连接时三次握手与四次挥手 SYN+ACK FIN+ACK

三次握手

在这里插入图片描述

SYN-->				//请求同步信号	(server端收到后  确认client能发)
	<--ACK ,SYN		//确认接收信号,+ 请求同步信号 (client端收到后  确认自己能收能发,service能收能发)
ACK-->				//确认接收信号	(service端收到后  确认自己能收能发,client能收能发    )

seq=x -->			//seq自己发的序列号  
	<-- seq=y,ack=x+1	//ack应答号  ack=x+表示自己接到了对面seq=x的消息
seq,ack-->			//由上两步也可以推出  seq=x+1  ack=y+1

四次挥手

在这里插入图片描述

FIN-->			//请求结束
 	<--ACK		//确认应答
 	;;;;		//server 发还没有发完的消息(这就是为什么有四次握手的原因)
 	<--ACK,FIN	//server 请求结束
ACK-->			//确认应答

seq=x-->
	<--seq=y,ack=x+1
	<--seq=y+n,ack=x+1
seq,ack-->			//  seq=x+1  ack=y+n+1;

问题总结:

为什么是3次握手,不是2次
2次握手可能出现的情况:
在这里插入图片描述
如上图:
第一个丢失的报文段延误后到达服务端,此时服务端误认为客户端又发出一次新的连接请求,同意建立连接。
只要服务端发出确认,就建立新的连接了,此时客户端忽略服务端发来的确认,也不发送数据,则服务端一致等待客户端发送数据。

什么是半连接:
第一次握手后,服务端不确定客户端能不能接受,先把连接请求放入半连接队列中,进入SYN_RECV状态(连接请求已接收状态),
完成三次握手再把连接放到全连接队列中。
一直没收到第三次握手,service端发重传包,达到规定次数,从半连接队列里删除。(发重传包间隔时间一般指数增长)

为什么有四次挥手,
service端收到FIN请求后要先应答ACK,
等发完未发的数据,然后再发FIN;

什么是2MSL,为什么要等2MSL
MSL:maximum segment lifetime——最大报文生命周期
1:让client接受完service在第2-3次挥手期间发的内容
2:保证本次连接所有报文从网络中消失。(不影响下一次连接)

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值